<template>
  <div class="contarner-page" @click.stop="showLanguageHandel">
    <page-header ref="languageRef"></page-header>
    <main>
      <div class="downloader flex_ccenter" v-if="!success">
        <div class="container">
          <div class="hero-widgets flex_between c-fff">
            <div class="tool-item shou flex_center" @click="changeTab(0)">
              <img src="/static/images/video.svg" alt="savinginsta video" />
              <span class="f-16">Video</span>
            </div>
            <div class="tool-item shou flex_center" @click="changeTab(1)">
              <img src="/static/images/Photo.svg" alt="savinginsta photo" />
              <span class="f-16">Photo</span>
            </div>
            <div class="tool-item shou flex_center" @click="changeTab(2)">
              <img src="/static/images/Reels.svg" alt="savinginsta reels" />
              <span class="f-16">Reels</span>
            </div>
            <div class="tool-item shou flex_center" @click="changeTab(3)">
              <img src="/static/images/Story.svg" alt="savinginsta story" />
              <span class="f-16">Story</span>
            </div>
            <div class="tool-item shou flex_center" @click="changeTab(4)">
              <img src="/static/images/Igtv.svg" alt="savinginsta IGTV" />
              <span class="f-16">IGTV</span>
            </div>
          </div>
          <div class="banner-heading flex_ccenter">
            <div class="heading-item" v-show="current == 0">
              <h1 class="title fw700 f-42 c-fff">인스타그램 비디오 다운로드</h1>
              <h2 class="sub c-fff f-18 fw400">
                Instagram 비디오, 사진, 릴, 스토리, IGTV 콘텐츠를 온라인으로
                다운로드하세요
              </h2>
            </div>
            <div class="heading-item" v-show="current == 1">
              <nuxt-link to="/ko/instagram-photo-download">
                <div @click="goToTop('Photo')" class="tItem">
                  <h3 class="title fw700 f-42 c-fff shou">
                    인스타그램 사진 다운로더
                  </h3>
                </div>
              </nuxt-link>
              <p class="sub c-fff f-18 fw400">
                아래에 인스타그램 사진 URL을 입력하세요
              </p>
            </div>
            <div class="heading-item" v-show="current == 2">
              <nuxt-link to="/ko/instagram-reels-video-download">
                <div @click="goToTop('reels')" class="tItem">
                  <h3 class="title fw700 f-42 c-fff shou">
                    Instagram 릴 다운로드
                  </h3>
                </div>
              </nuxt-link>
              <p class="sub c-fff f-18 fw400">
                아래에 Instagram Reels URL을 입력하세요.
              </p>
            </div>
            <div class="heading-item" v-show="current == 3">
              <nuxt-link to="/ko/instagram-story-download">
                <div @click="goToTop('story')" class="tItem">
                  <h3 class="title fw700 f-42 c-fff shou">
                    인스타그램 스토리 다운로드
                  </h3>
                </div>
              </nuxt-link>
              <p class="sub c-fff f-18 fw400">
                아래에 인스타그램 스토리 URL을 입력하세요
              </p>
            </div>
            <div class="heading-item" v-show="current == 4">
              <nuxt-link to="/ko/igtv-downloader">
                <div @click="goToTop('igtv')" class="tItem">
                  <h3 class="title fw700 f-42 c-fff shou">
                    비디오 IGTV 다운로드
                  </h3>
                </div>
              </nuxt-link>
              <p class="sub c-fff f-18 fw400">
                아래에 인스타그램 IGTV URL을 입력하세요
              </p>
            </div>
          </div>
          <div class="form flex_center">
            <div class="input-box flex_between">
              <!-- <input
                type="text"
                class="input f-18"
                v-model="input"
                @input="handleInput"
                @paste="handleInput"
                placeholder="Paste URL Instagram"
                list="fruits"
                name="fruit"
              />
              <datalist id="fruits">
                <option value="Apple"></option>
                <option value="Banana"></option>
                <option value="Cherry"></option>
              </datalist> -->
              <input
                type="text"
                class="input f-18"
                v-model="input"
                :disabled="isHttpLoading"
                @input="handleInput"
                @paste="handleInput"
                @keydown="sendDownload($event)"
                placeholder="Paste URL Instagram"
              />
              <div
                class="Paste shou flex_center"
                @click="handleClickPasted"
                v-if="input == ''"
              >
                <div class="btnbg"></div>
                <div class="f-16 c-000 fw700">Paste</div>
              </div>
              <div
                class="clear shou flex_center"
                v-if="input != '' && !isHttpLoading"
                @click.stop="input = ''"
              >
                <div class="btnbg"></div>
                <div class="f-16 c-000 fw700">Clear</div>
              </div>
            </div>
            <div
              v-if="!isHttpLoading"
              @click.stop="downloadHandel"
              class="submit shou fw700 c-fff flex_center"
            >
              Download
            </div>
            <div v-else class="submit shou fw700 c-fff flex_center">
              Please wait
            </div>
          </div>
          <div class="app-submit flex_ccenter">
            <div
              class="submit flex_center"
              v-if="!isHttpLoading"
              @click.stop="downloadHandel"
            >
              <div class="fw700 c-fff f-21">Download</div>
            </div>
            <div class="submit flex_center" v-else>
              <div class="fw700 c-fff f-21">Please wait</div>
            </div>
          </div>
          <div class="loading" v-if="isHttpLoading">
            <div class="loading-dots flex_center">
              <div class="dot"></div>
              <div class="dot"></div>
              <div class="dot"></div>
              <div class="dot"></div>
            </div>
            <div class="tips f-18 flex_center">
              <div>데이터를 검색하는 중입니다. 잠시만 기다려주세요!</div>
            </div>
          </div>
          <div class="error flex_ccenter" v-if="httpError1">
            <div class="hono flex_">
              <div class="error-img"></div>
              <div class="error-img"></div>
              <div class="error-img"></div>
            </div>
            <div class="errMsg f-18">
              해당 사이트는 비공개이기 때문에 귀하의 링크를 처리할 수 없습니다
            </div>
          </div>
          <div class="error flex_ccenter" v-if="httpError2">
            <div class="hono flex_">
              <div class="error-img"></div>
              <div class="error-img"></div>
              <div class="error-img"></div>
            </div>
            <div class="errMsg f-18">
              입력한 데이터는 링크가 아닙니다. 유효한 링크를 입력하십시오. 예:
              <div>https://www.instagram.com/reel/Cml9qu-ISqx</div>
            </div>
          </div>
        </div>
      </div>
      <!-- 广告位start -->
      <!-- 广告位end -->
      <div class="container" v-if="!success">
        <div class="body-content">
          <div class="title-box">
            <h3 class="title f-36 c-000 italic">Savinginsta.Com의 모든 기능</h3>
            <p class="sub f-16 c-ccc">
              Savinginsta는 모든 종류의 Instagram 비디오와 호환됩니다 그리고
              이미지 링크.
            </p>
          </div>
          <div class="list-tools-pc">
            <div class="tool-box flex_between">
              <div class="tool-info">
                <nuxt-link to="/ko">
                  <div @click="goToTop('video')" class="tItem">
                    <h4>인스타그램 비디오 다운로더</h4>
                  </div>
                </nuxt-link>
                <p>
                  Savinginsta는 귀하가 직접 다운로드할 수 있도록 설계되었습니다.
                  인스타그램의 콘텐츠. 두 가지 모두 다운로드를 지원합니다.
                  Insta의 개별 및 여러 동영상.
                </p>
              </div>
              <div class="tool-thumb">
                <img
                  src="/static/images/instagram-video-downloader.webp"
                  alt="Instagram video downloader"
                />
              </div>
              <div class="tool-thumb-app">
                <img
                  src="/static/images/instagram-video-downloader-app.webp"
                  alt="Instagram video downloader"
                />
              </div>
            </div>
            <div class="tool-box tool-reverse flex_between">
              <div class="tool-info">
                <nuxt-link to="/ko/instagram-photo-download">
                  <div @click="goToTop('Photo')" class="tItem">
                    <h4>인스타그램 사진 다운로더</h4>
                  </div>
                </nuxt-link>
                <p>
                  Savinginsta의 Instagram 사진 다운로더를 사용하면 손쉽게 작업을
                  수행할 수 있습니다. 콜라주를 포함하여 단일 또는 여러 장의
                  사진을 저장하려면 인스타그램에서. 이 도구를 사용하면 개별
                  게시물을 다운로드할 수 있습니다. 이미지나 인스타그램 사진
                  모음은 간단하고 똑바로.
                </p>
              </div>
              <div class="tool-thumb">
                <img
                  loading="lazy"
                  src="/static/images/instagram-photo-downloader.webp"
                  alt="Instagram photo downloader"
                />
              </div>
              <div class="tool-thumb-app">
                <img
                  loading="lazy"
                  src="/static/images/instagram-photo-downloader-app.webp"
                  alt="Instagram photo downloader"
                />
              </div>
            </div>
            <div class="tool-box flex_between">
              <div class="tool-info">
                <nuxt-link to="/ko/instagram-reels-video-download">
                  <div @click="goToTop('reels')" class="tItem">
                    <h4>Instagram 릴 다운로드</h4>
                  </div>
                </nuxt-link>
                <p>
                  Savinginsta의 Instagram Reels 다운로더를 사용하면 다음을
                  수행할 수 있습니다. Instagram 게시물에서 Reels 비디오를 손쉽게
                  다운로드하여 Instagram이 있는 간단한 솔루션을 제공합니다.
                  자체적으로는 이 기능을 지원하지 않습니다.
                </p>
              </div>
              <div class="tool-thumb">
                <img
                  loading="lazy"
                  src="/static/images/download-instagram-reels.webp"
                  alt="Download Instagram Reels"
                />
              </div>
              <div class="tool-thumb-app">
                <img
                  loading="lazy"
                  src="/static/images/download-instagram-reels-app.webp"
                  alt="Download Instagram Reels"
                />
              </div>
            </div>
            <div class="tool-box tool-reverse flex_between">
              <div class="tool-info">
                <nuxt-link to="/ko/igtv-downloader">
                  <div @click="goToTop('igtv')" class="tItem">
                    <h4>IGTV 다운로더</h4>
                  </div>
                </nuxt-link>
                <p>
                  인스타그램 스토리는 사용자에게 독특한 플랫폼을 제공합니다.
                  사진과 동영상을 통해 일상의 경험을 공유하세요. 폭넓은 청중.
                  때로는 즐겨찾기를 저장하고 싶을 수도 있습니다. 스토리이지만
                  앱에서는 이 기능을 사용할 수 없습니다. Savinginsta는 다음과
                  같은 솔루션을 제공하여 이 문제를 해결합니다. 사용자가
                  인스타그램 스토리를 쉽게 다운로드하고 볼 수 있습니다.
                  오프라인에서도 기억에 남는 콘텐츠가 손실되지 않도록
                  보장합니다.
                </p>
              </div>
              <div class="tool-thumb">
                <img
                  loading="lazy"
                  src="/static/images/igtv-downloader.webp"
                  alt="IGTV downloader"
                />
              </div>
              <div class="tool-thumb-app">
                <img
                  loading="lazy"
                  src="/static/images/igtv-downloader-app.webp"
                  alt="IGTV downloader"
                />
              </div>
            </div>
            <div class="tool-box flex_between">
              <div class="tool-info">
                <nuxt-link to="/ko/instagram-story-download">
                  <div @click="goToTop('story')" class="tItem">
                    <h4>인스타그램 스토리 뷰어</h4>
                  </div>
                </nuxt-link>
                <p>
                  IGTV는 길이가 긴 동영상을 제공합니다. 즉시 확인하고 다운로드할
                  수도 있습니다. IGTV 비디오를 PC로 전송하세요. 이를 통해
                  편리하게 인터넷이 없어도 나중에 다시 방문하여 즐길 수
                  있습니다. IGTV 콘텐츠에 대한 걱정을 없애줍니다. 제거 중이거나
                  사용할 수 없습니다.
                </p>
              </div>
              <div class="tool-thumb">
                <img
                  loading="lazy"
                  src="/static/images/instagram-story-download.webp"
                  alt="Instagram Story Download"
                />
              </div>
              <div class="tool-thumb-app">
                <img
                  loading="lazy"
                  src="/static/images/instagram-story-download-app.webp"
                  alt="Instagram Story Download"
                />
              </div>
            </div>
          </div>
          <div class="app-box">
            <div class="app-box__info">
              <h3 class="app-box__title f-21 fw700 c-000">
                앱 Insta 다운로더로 다운로드
              </h3>
              <p class="f-16 c-ccc">
                우리 앱은 다운로드를 위한 빠르고 간단한 솔루션을 제공합니다.
                인스타그램 동영상, HD 화질의 동영상을 제공하지 않고 워터마크.
              </p>
            </div>
            <div class="app-link">
              <a 
                  target="_blank" href="https://play.google.com/store/apps/details?id=ins.freevideodownload.pro">
                <img src="/static/images/google-play.webp" alt="Download app " />
              </a>
              <a href="https://apps.apple.com/us/app/repost-for-video-save-story/id6462401460"  target="_blank">
                <img src="/static/images/IOS.webp" alt="Download app " />
              </a>
            </div>
          </div>
          <div class="quick-info">
            <h3 class="f-32 c-000">
              SAVINGINSTA - 최고의 도구 인스타그램 다운로더
            </h3>
            <p class="f-16 c-ccc">
              Savinginsta는 최고의 Instagram 다운로더로 돋보입니다. 고품질
              콘텐츠를 신속하게 다운로드할 수 있도록 전문적으로 제작되었습니다.
              인스 타 그램. 가장 효과적인 다운로드 방법을 찾을 때 인스타그램
              미디어, Savinginsta 다운로더가 선두로 떠오름 타사 솔루션.
            </p>
            <p class="f-16 c-ccc">
              전 세계에서 가장 인기 있는 사진 공유 앱으로 알려진
              인스타그램(Instagram)은 매일 수백만 장의 사진이 업로드되는 것을
              목격합니다. 그러한 경우 순간, 인스타그램 비디오 다운로더의
              필요성은 귀하의 즉각적인 요구에 맞는 완벽한 솔루션을 제공합니다.
              이 도구는 자신의 정보를 보존하려는 모든 사람에게 필수적입니다.
              인스타그램 콘텐츠를 효율적으로 즐겨보세요.
            </p>
          </div>
          <div class="features c-fff">
            <h3 class="h3 fw700 f-21">
              Savinginsta Instagram 비디오 다운로더의 기능:
            </h3>
            <div class="attributes-list flex_between">
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  인스타그램 비디오 다운로드 빠르고 쉽고 안전합니다.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  인스타그램 계정에서 로그아웃할 수 있습니다.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  버튼 하나만 클릭하면 인스타그램 이미지를 다운로드할 수
                  있습니다 그리고 비디오.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  이미지와 비디오를 다운로드하고 원래의 고화질로 저장하세요
                  정의와 품질.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  개인 계정에서 Instagram 비디오를 다운로드하고 저장하세요.
                </div>
              </div>
              <div class="item flex_">
                <div class="bgimg"></div>
                <div class="f-14 c-fff">
                  고속: 현재 Savinginsta는 가장 빠른 속도를 제공합니다. 다운로드
                  속도.
                </div>
              </div>
            </div>
          </div>
          <div class="how">
            <div class="how-title">
              <h3 class="f-36 c-000 italic">
                Savinginsta Instagram Downloader를 사용하여 IG에서 저장하는 방법
              </h3>
              <div class="note c-ccc f-16">
                참고: 원하는 Instagram 비디오나 사진이 있는지 확인하세요.
                다운로드는 공개 계정에서 이루어집니다.
              </div>
            </div>
            <div class="steps">
              <div class="step">
                <div class="one">
                  <span class="fw700 c-blue f-16">01단계:</span>
                  <span class="f-16 c-000"
                    >Instagram 사진 및 동영상의 URL 복사</span
                  >
                </div>
                <div class="app-step">
                  <div class="fw700 c-000 f-16">인스타그램 앱에서:</div>
                  <div class="c-000 f-16">
                    iOS의 경우: Instagram 사진 URL을 얻으려면 탭하세요.
                  </div>
                  <div class="c-000 f-16">
                    Android의 경우: 게시물 위를 클릭하고 '복사'를 선택하세요.
                    Instagram URL'을 선택한 다음 '공유 URL 복사'를 누르세요.
                    링크는 다음과 같습니다. 클립보드에 복사되었습니다.
                  </div>
                  <div class="fw700 c-000 f-16">- PC/맥:</div>
                  <div class="c-000 f-16">
                    인스타그램 동영상이나 사진의 날짜를 마우스 오른쪽 버튼으로
                    클릭하고 Instagram 콘텐츠를 다운로드하려면 "링크 주소
                    복사"를 선택하세요. 당신의 데스크탑.
                  </div>
                </div>
              </div>
              <div class="step">
                <div class="one">
                  <span class="fw700 c-blue f-16">단계02:</span>
                  <span class="f-16 c-000">
                    Savinginsta.App에 URL을 붙여넣으세요.</span
                  >
                </div>
                <div class="app-step">
                  <div class="c-000 f-16">
                    전용 Instagram인 Savinginsta.App으로 이동하세요. 다운로더.
                  </div>
                  <div class="c-000 f-16">
                    복사한 URL을 복사하여 지정된 텍스트 필드에 붙여넣습니다.
                  </div>
                </div>
              </div>
              <div class="step">
                <div class="one">
                  <span class="fw700 c-blue f-16">03단계:</span>
                  <span class="f-16 c-000">다운로드 시작</span>
                </div>
                <div class="app-step">
                  <div class="c-000 f-16">
                    Instagram 비디오를 시작하려면 "다운로드" 버튼을 클릭하거나
                    사진 다운로드 과정.
                  </div>
                  <div class="fw700 c-000 f-16">중요한 사용 정보</div>
                  <div class="c-000 f-16">
                    Savinginsta는 주로 비디오를 다운로드하고 자신의 Instagram
                    계정에서 가져온 이미지입니다.
                  </div>
                  <div class="c-000 f-16">
                    우리는 사용자의 개인정보 보호를 최우선으로 생각하며 이를
                    거부할 권리를 보유합니다. 당사의 도구가 타인의 권리를
                    침해하는 데 사용되는 경우 서비스를 제공하세요. 개인 정보
                    보호 또는 승인되지 않은 자료에 액세스합니다.
                  </div>
                </div>
              </div>
            </div>
            <div class="user-note f-16">
              <div class="app-tip"></div>
              당사 정책에 대한 포괄적인 이해를 위해

              <a class="fw700 c-blue" href="/terms-of-service">
                여기에서 전체 서비스 약관을 읽어보세요.</a
              >
            </div>
          </div>
          <div class="faq-section">
            <h3 class="faq-title f-36 c-000 italic">FAQ</h3>
            <div class="accordion">
              <div
                id="faq"
                itemscope="itemscope"
                itemtype="https://schema.org/FAQPage"
              >
                <div
                  itemprop="mainEntity"
                  itemscope="itemscope"
                  itemtype="https://schema.org/Question"
                  class="accordion-item"
                  :key="k"
                  v-for="(item, k) in faqList"
                >
                  <h4 itemprop="name" class="accordion-title fw700 f-16">
                    {{ item.title }}
                  </h4>
                  <div
                    itemprop="acceptedAnswer"
                    itemscope=""
                    itemtype="https://schema.org/Answer"
                  >
                    <div
                      itemprop="text"
                      class="accordion-text f-16 c-ccc fw400"
                    >
                      {{ item.content }}
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
      <!-- 解析结果 start -->
      <div class="container" v-if="success">
        <success-content
          @refresh="refresh"
          :list="successList"
        ></success-content>
      </div>
      <!-- 解析结果 end -->
    </main>
    <footer>
      <div class="container">
        <div class="footer-content">
          <div class="footer-link">
            <div class="row flex_between">
              <div class="col-12">
                <div class="link-label fw700 c-000 f-21">도구</div>
                <ul class="list-unstyled c-ccc f-16">
                  <li @click="goToTools('story')">
                    <nuxt-link to="/ko/instagram-story-download" 
                      >인스타그램 스토리 다운로더</nuxt-link
                    >
                  </li>
                  <li @click="goToTools('reels')">
                    <nuxt-link to="/ko/instagram-reels-video-download" 
                      >인스타그램 릴 다운로더</nuxt-link
                    >
                  </li>
                  <li>
                    <a href="https://savingtik.com/" target="_blank"
                      >틱톡 다운로더</a
                    >
                  </li>
                </ul>
              </div>
              <div class="col-6">
                <div class="link-label fw700 c-000 f-21">지원하다</div>
                <ul class="list-unstyled c-ccc f-16">
                  <li>
                    <nuxt-link to="/contact"> 연락하다 </nuxt-link>
                  </li>
                  <li>
                    <nuxt-link to="/blog"> Blog </nuxt-link>
                  </li>
                </ul>
              </div>
              <div class="col-6">
                <div class="link-label fw700 c-000 f-21">합법적인</div>
                <ul class="list-unstyled c-ccc f-16">
                  <li>
                    <nuxt-link to="/terms-of-service">
                      서비스 약관
                    </nuxt-link>
                  </li>
                  <li>
                    <nuxt-link to="/privacy-policy"> 개인 정보 정책 </nuxt-link>
                  </li>
                </ul>
              </div>
            </div>
          </div>
          <div class="copyright flex_ccenter">
            <b class="fw700 f-21 c-000"
              >저희는 인스타그램이나 메타와 관련이 없습니다</b
            >
            <div class="c-ccc f-16">
                © {{new Date().getFullYear()}} Insta Downloader All rights reserved. 
            </div>
          </div>
        </div>
      </div>
    </footer>
  </div>
</template>

<script>
import { mapState, mapGetters, mapMutations } from "vuex";
import pageHeader from "~/components/page-header.vue";
import SuccessContent from "~/components/success-content.vue";
import CryptoJS from "crypto-js";
import { handleClick, checkString } from "@/plugins/Firebase.js";

export default {
  components: { pageHeader, SuccessContent },
  name: "IndexPage",
  head: {
    htmlAttrs: {
      lang: "ko",
    },
    bodyAttrs: {
      "data-lang": "ko",
    },
    title:
      "Instagram 다운로더 - 온라인으로 Instagram 비디오 다운로드 - Savinginsta",
    meta: [
      { property: "og:locale", content: "ko" },
      //Page Information
      {
        name: "description",
        content:
          "Savinginsta: 사용자 친화적인 도구를 사용하여 Instagram 비디오, 릴, 사진을 쉽게 다운로드할 수 있습니다. 모든 장치에 Instagram 비디오를 빠르고 안전하게 저장하세요.",
      },
      //Schema.org Microdata
      {
        itemprop: "name",
        content:
          "Instagram 다운로더 - 온라인으로 Instagram 비디오 다운로드 - Savinginsta",
      },

      // Facebook / OpenGraph
      {
        property: "og:title",
        content:
          "Instagram 다운로더 - 온라인으로 Instagram 비디오 다운로드 - Savinginsta",
      },
      { property: "og:type", content: "website" },
      { property: "og:url", content: "https://savinginsta.com/ko" },

      {
        property: "og:description",
        content:
          "Savinginsta: 사용자 친화적인 도구를 사용하여 Instagram 비디오, 릴, 사진을 쉽게 다운로드할 수 있습니다. 모든 장치에 Instagram 비디오를 빠르고 안전하게 저장하세요.",
      },
      //Twitter
      { name: "twitter:card", content: "summary" },
      { name: "twitter:url", content: "https://savinginsta.com/ko" },
      {
        name: "twitter:title",
        content:
          "Instagram 다운로더 - 온라인으로 Instagram 비디오 다운로드 - Savinginsta",
      },
      {
        name: "twitter:description",
        content:
          "Savinginsta: 사용자 친화적인 도구를 사용하여 Instagram 비디오, 릴, 사진을 쉽게 다운로드할 수 있습니다. 모든 장치에 Instagram 비디오를 빠르고 안전하게 저장하세요.",
      },
      //multilingual
      {
        name: "google",
        content: "notranslate",
      },
      {
        itemprop: "image",
        content: "https://savinginsta.com/static/images/savinginsta_thumbnail.jpg",
      },
      {
        property: "og:image",
        content: "https://savinginsta.com/static/images/savinginsta_thumbnail.jpg",
      },
      {
        name: "twitter:image",
        content: "https://savinginsta.com/static/images/savinginsta_thumbnail.jpg",
      },
    ],
    link: [
      //multilingual
      {
        rel: "alternate",
        hreflang: "x-default",
        href: "https://savinginsta.com/ko",
      },
      {
        rel: "alternate",
        hreflang: "en",
        href: "https://savinginsta.com/",
      },
      {
        rel: "alternate",
        hreflang: "en-in",
        href: "https://savinginsta.com/in",
      },
      {
        rel: "alternate",
        hreflang: "vi",
        href: "https://savinginsta.com/vn",
      },
      {
        rel: "alternate",
        hreflang: "tr",
        href: "https://savinginsta.com/tr",
      },
      {
        rel: "alternate",
        hreflang: "id",
        href: "https://savinginsta.com/id",
      },
      {
        rel: "alternate",
        hreflang: "fr",
        href: "https://savinginsta.com/fr",
      },
      {
        rel: "alternate",
        hreflang: "pt",
        href: "https://savinginsta.com/pt",
      },
      {
        rel: "alternate",
        hreflang: "ru",
        href: "https://savinginsta.com/ru",
      },
      {
        rel: "alternate",
        hreflang: "es",
        href: "https://savinginsta.com/es",
      },
      {
        rel: "alternate",
        hreflang: "ms",
        href: "https://savinginsta.com/ms",
      },
      {
        rel: "alternate",
        hreflang: "ko",
        href: "https://savinginsta.com/ko",
      },
      {
        rel: "alternate",
        hreflang: "ja",
        href: "https://savinginsta.com/ja",
      },
      {
        rel: "alternate",
        hreflang: "jv",
        href: "https://savinginsta.com/jv",
      },
      {
        rel: "alternate",
        hreflang: "cs",
        href: "https://savinginsta.com/cs",
      },
      {
        rel: "alternate",
        hreflang: "de",
        href: "https://savinginsta.com/de",
      },
      {
        rel: "alternate",
        hreflang: "it",
        href: "https://savinginsta.com/it",
      },
      {
        rel: "alternate",
        hreflang: "pl",
        href: "https://savinginsta.com/pl",
      },
      {
        rel: "alternate",
        hreflang: "hu",
        href: "https://savinginsta.com/hu",
      },
      {
        rel: "alternate",
        hreflang: "nl",
        href: "https://savinginsta.com/nl",
      },
      {
        rel: "alternate",
        hreflang: "ro",
        href: "https://savinginsta.com/ro",
      },
      {
        rel: "alternate",
        hreflang: "el",
        href: "https://savinginsta.com/el",
      },
      {
        rel: "canonical",
        href: "https://savinginsta.com/ko",
      },
    ],
    script: [
      {
        json: {
          "@context": "https://schema.org",
          "@type": "WebSite",
          name: "Instagram 다운로더 - 온라인으로 Instagram 비디오 다운로드 - Savinginsta",
          url: "https://savinginsta.com",
          description:
            "Savinginsta: 사용자 친화적인 도구를 사용하여 Instagram 비디오, 릴, 사진을 쉽게 다운로드할 수 있습니다. 모든 장치에 Instagram 비디오를 빠르고 안전하게 저장하세요.",
          publisher: {
            "@type": "Organization",
            name: "Savinginsta",
            logo: {
              "@type": "ImageObject",
              url: "https://savinginsta.com/static/images/logo.webp",
            },
          },
        },
        type: "application/ld+json",
      },
    ],
  },
  data() {
    return {
      input: "",
      success: false,
      isHttpLoading: false,
      httpError1: false,
      httpError2: false,
      current: 0,
      successList: [],
      faqList: [
        {
          title: `인스타그램 비디오 다운로더란 무엇입니까?`,
          content: `Instagram 비디오 다운로더는 나중에 사용하기 위해 Instagram 사진, 비디오 및 IGTV 콘텐츠를 저장하도록 설계된 웹 기반 도구입니다. Savinginsta는 Instagram에서 콘텐츠를 쉽게 다운로드할 수 있는 최고의 선택입니다.`,
        },
        {
          title: `Savinginsta를 사용하려면 내 Instagram 계정에 로그인해야 합니까?`,
          content: `아니요, Instagram 계정에 로그인할 필요가 없습니다. Savinginsta는 개인 정보를 요구하지 않고 Instagram에서 안전하고 익명의 다운로드를 보장합니다.`,
        },
        {
          title: `Instagram에서 동영상을 직접 저장할 수 있나요?`,
          content: `Instagram 자체에서는 Instagram 피드나 다른 사람의 스토리에서 비디오를 직접 다운로드할 수 없습니다. 그러나 Savinginsta는 간단한 솔루션을 제공합니다. https://savinginsta.com 웹사이트를 방문하여 제공된 간단한 지침을 따르십시오.`,
        },
        {
          title: `Instagram 비디오 및 사진 다운로드 서비스는 무료인가요?`,
          content: `예, Savinginsta는 다운로드 횟수에 제한 없이 이 서비스를 완전히 무료로 제공합니다.`,
        },
        {
          title: `비공개 Instagram 계정에서 콘텐츠를 다운로드할 수 있나요?`,
          content: `실제로 Savinginsta를 사용하면 개인 Instagram 계정에서 비디오, 스토리, 사진을 다운로드할 수 있습니다. 자세한 지침은 해당 플랫폼에서 확인할 수 있습니다.`,
        },
        {
          title: `인스타그램 스토리를 저장할 수 있나요?`,
          content: `전적으로. Savinginsta를 사용하면 모든 Instagram 스토리를 보고 다운로드할 수 있습니다. 스토리에 있는 세 개의 점(⁝)을 클릭하고 링크를 복사한 후 Savinginsta에 붙여넣기만 하면 다운로드가 시작됩니다.`,
        },
        {
          title: `Savinginsta는 컴퓨터에서 다운로드를 지원합니까?`,
          content: `예, Savinginsta는 PC와 완벽하게 호환되므로 Instagram 비디오, 사진, 스토리 등을 컴퓨터에 직접 다운로드할 수 있습니다.`,
        },
        {
          title: `Savinginsta를 사용하여 Android 기기의 Instagram에서 다운로드할 수 있나요?`,
          content: `틀림없이. Android 사용자의 경우 Instagram 게시물 링크를 복사하여 Savinginsta에 붙여넣고 저장하면 됩니다. 자세한 내용은 Android의 Instagram 다운로드 가이드를 참조하세요.`,
        },
        {
          title: `iPhone/iPad(iOS)에서 Instagram 비디오 및 사진을 어떻게 다운로드할 수 있나요?`,
          content: `Savinginsta는 다양한 유형의 비디오를 iPhone 또는 iPad에 다운로드하기 위한 사용자 친화적인 단계별 가이드를 만들었습니다. 지침을 보려면 다음 링크를 따르세요. iPhone에서 Instagram 비디오를 다운로드하세요.`,
        },
        {
          title: `Instagram 비디오가 다운로드하는 대신 재생되면 어떻게 되나요?`,
          content: `이 문제를 해결하려면 비디오를 마우스 오른쪽 버튼으로 클릭하고 '다른 이름으로 저장...'을 선택하여 마우스 왼쪽 버튼을 클릭하는 대신 원하는 저장 위치를 선택하세요.`,
        },
        {
          title: `다운로드 후 비디오는 어디에 저장됩니까?`,
          content: `다운로드한 비디오는 일반적으로 Android 모바일 장치와 PC 모두의 '다운로드' 폴더에 저장됩니다.`,
        },
      ],
    };
  },
  computed: {
    ...mapGetters(["language"]),
  },
  mounted() {
    this.debouncedDownInput = this.debounce(this.downInput, 1000);
    //到达首页
    handleClick("guide_homepage_frist", {});
    handleClick("guide_homepage", {});
  },
  methods: {
    async downloadHandel() {
      if (this.isHttpLoading || this.input === "") return;
      this.isHttpLoading = false;
      this.httpError1 = false;
      this.httpError2 = false;
      this.input = this.input.replace(/^.*\s?https:\/\//, "https://");
      const insUrlPattern = new RegExp("^http(s|)://.*instagram.com.*/.*$");
      let type = checkString(this.input);
      if (!insUrlPattern.test(this.input)) {
        //点击解析下载按钮
        handleClick("action_ins_detect_boinsom", {
          site: "other",
          noislink: this.input,
          from: "video",
          type: type,
        });
        this.httpError2 = true;
        this.isHttpLoading = false;
        return;
      }
      //点击解析下载按钮
      handleClick("action_ins_detect_boinsom", {
        site: "other",
        from: "video",
        type: type,
      });
      //开始解析  ins_start_resolve
      handleClick("ins_start_resolve", {
        islink: this.input,
        from: "video",
        type: type,
      });
      this.isHttpLoading = true;
      try {
        let result = this.uki(this.input);
        const response = await fetch(
          "https://savinginsta.com/api/downloader/analysis",
          {
            method: "POST",
            headers: { "Content-Type": "application/json" },
            body: JSON.stringify({
              path: result,
            }),
          }
        );
        let encryptedResponse = await response.text();
        let parse = JSON.parse(encryptedResponse);
        if (parse.code != 200) {
          // 解析失败  ins_resolve_fail
          handleClick("ins_resolve_fail", {
            reason: "Failed to fetch",
            islink: this.input,
            from: "video",
            type: type,
          });
          this.httpError1 = true;
          this.isHttpLoading = false;
          return;
        } else {
          //解析成功  ins_resolve_success
          handleClick("ins_resolve_success", {
            type: type,
            from: "video",
          });
          let decryptedResponse = await this.eki(parse.data); // 使用你的解密函数
          this.successList = JSON.parse(decryptedResponse);
          this.success = true;
          this.isHttpLoading = false;
        }
      } catch (error) {
        // 解析失败  ins_resolve_fail
        handleClick("ins_resolve_fail", {
          reason: "Failed to fetch",
          islink: this.input,
          from: "video",
          type: type,
        });
        console.error(error);
        this.httpError1 = true;
        this.isHttpLoading = false;
      }
    },

    uki(input) {
      let CIPHER_ALGORITHM = "DES-CBC";
      let IV_SIZE = 8;
       
      
  try {
        const complexKey = [
          process.env.part1,
          process.env.part2,
          process.env.part3,
          process.env.part4,
          process.env.part5,
          process.env.part6,
          process.env.part7,
          process.env.part8,
        ].join("");
        const keyBytes = CryptoJS.enc.Utf8.parse(complexKey);
        const inputBytes = CryptoJS.enc.Utf8.parse(input);
        const ivBytes = CryptoJS.lib.WordArray.random(IV_SIZE);
        const encrypted = CryptoJS.DES.encrypt(inputBytes, keyBytes, {
          iv: ivBytes,
          mode: CryptoJS.mode.CBC,
          padding: CryptoJS.pad.Pkcs7,
        });
        const ciphertext = ivBytes.concat(encrypted.ciphertext);
        return ciphertext.toString();
      } catch (error) {
        console.error(error);
        return null;
      }
    },
    eki(cipherText) {
      let CIPHER_ALGORITHM = "DES-CBC";
      let IV_SIZE = 8;
       
      const complexKey = [
          process.env.part1,
          process.env.part2,
          process.env.part3,
          process.env.part4,
          process.env.part5,
          process.env.part6,
          process.env.part7,
          process.env.part8,
        ].join("");
      try {
        let keyBytes = CryptoJS.enc.Utf8.parse(
          complexKey.padEnd(CIPHER_ALGORITHM === "DES-CBC" ? 8 : 16)
        );
        let ivBytes = { iv: CryptoJS.enc.Hex.parse(process.env.DES_IV) }; // 如果使用CBC模式，需要一个初始化向量iv，这里是空向量
        let decrypted = CryptoJS.DES.decrypt(
          { ciphertext: CryptoJS.enc.Hex.parse(cipherText) },
          keyBytes,
          ivBytes
        );
        return decrypted.toString(CryptoJS.enc.Utf8);
      } catch (e) {
        console.error(e);
        return null;
      }
    },
    sendDownload(event) {
      if (event.keyCode === 13 && !this.isHttpLoading) {
        this.downloadHandel();
        event.preventDefault();
        return false;
      }
    },
    changeTab(k) {
      this.current = k;
    },
    handleInput(e) {
      this.debouncedDownInput(e);
    },
    debounce(fn, delay) {
      let timer;
      return function () {
        let context = this;
        let args = arguments;
        clearTimeout(timer);
        timer = setTimeout(() => {
          fn.apply(context, args);
        }, delay);
      };
    },

    downInput(e) {
      let type = checkString(e.target.value);
      // 粘贴链接到输入框 action_ins_paste
      handleClick("action_ins_paste", {
        islink: e.target.value,
        from: "photo",
        type: type,
      });
    },
    handleClickPasted() {
      if (!navigator.clipboard) {
        console.log("Clipboard API not available");
        return;
      }
      navigator.clipboard
        .readText()
        .then((text) => {
          this.input = text;
          let type = checkString(text);
          // 粘贴链接到输入框 action_ins_paste
          handleClick("action_ins_paste", {
            islink: text,
            from: "photo",
            type: type,
          });
        })
        .catch((err) => {
          console.error("Failed to read clipboard contents: ", err);
        });
    },
    showLanguageHandel() {
      this.$refs.languageRef.close();
    },
    refresh() {
      this.success = false;
      this.input = "";
      this.successList = [];
    },
    goToTop(site) {
      //切换页面
      handleClick("action_page_switch", {
        site: site,
        from: top,
      });
    },
    goToTools(site) {
      //切换页面
      handleClick("action_page_switch", {
        site: site,
        from: tools,
      });
    },
  },
};
</script>
<style lang="scss" scoped>
 @import "@/static/style/index.css";
.loading {
  .loading-dots {
    position: relative;
    z-index: 999;
    margin-top: 70px;
  }

  .dot {
    background-color: #ffffff;
    width: 12px;
    height: 12px;
    border-radius: 50%;
    margin: 0 10px;
    animation: loading-animation 1.5s infinite;
  }

  .dot:nth-child(2) {
    animation-delay: 0.5s;
  }

  .dot:nth-child(3) {
    animation-delay: 0.8s;
  }
  .dot:nth-child(4) {
    animation-delay: 1s;
  }
}
@keyframes loading-animation {
  0%,
  50%,
  80%,
  100% {
    transform: scale(1);
  }
  40% {
    transform: scale(1.5);
  }
}
@media (max-width: 768px) {
  .loading {
    .loading-dots {
      margin-top: 26px !important;
    }
    .dot {
      width: 8px !important;
      height: 8px !important;
    }
  }
}
</style>
